#pragma once

/* 定义开关枚举 */
typedef enum { OPEN = 1, OFF = 0 } CtlStatus;

/* 定义开关序号 1-4*/
typedef enum { S_1st = 1, S_2nd, S_3rd, S_4th } SwitchNo;

/* 下行数据 */
typedef struct {
    SwitchNo S_No;    // 开关号
    CtlStatus status; // 开关状态
    int timestamp;    // 时间戳
} SwitchStatus;

/* 所有下行的字段名称 */
typedef struct {
    const char *S_No;      // ID字段
    const char *status;    // 传感器字段
    const char *timestamp; // 时间戳字段
} SwitchStatusItems;

/**********************传感器部分************************/
/* 所有传感器数据包的字段名称 */
typedef struct {
    const char *id;        // ID字段
    const char *sensor;    // 传感器字段
    const char *timestamp; // 时间戳字段
    const char *times;     // 心跳上传次数字段
    const char *ctl;       // 下行控制字段
} DeviceItemsKey;

/* 数据包的部分字段值, 不包含传感器数据 */
typedef struct {
    char *const id; // 设备ID
    // char *sensor;     // 传感器Json字符串, 未使用
    int timestamp; // 时间戳
    int times;     // 启动心跳上传次数
    // CtlStatus status; // 下行控制, 状态, 未使用
} DeviceItemsValue;

/**********************控制设备部分************************/
/* 控制设备的所有字段名称 */
typedef struct {
    const char *ctr_id; // ID字段
    const char *status; // 上行控制设备(继电器)字段
    const char *ctr;    // 下行控制状态字段
    const char *result; // 控制成功或失败字段
} CtrItemsKey;

/* 控制设备的部分字段值 */
typedef struct {
    char *ctr_id; // 控制设ID
    int status;   // 控制设备状态(继电器状态)
    int ctr;      // 下行控制状态
    int result;   // 控制成功或失败返回值
} CtrItemsValue;

/* 传感器字段名称 */
typedef struct {
    const char *et;   // environment temperature (环境温度)
    const char *eh;   // environment humidity (环境湿度)
    const char *pm25; // PM2.5
    const char *pm10; // PM10
    const char *o2;   // O2 (氧气浓度)
    const char *wt;   // water temperature (水温)
    const char *ph;   // PH (水环境PH)
    const char *do2;  // dissolved oxygen (溶解氧)
    const char *ws;   // wind speed (风速)
    const char *wd;   // wind direction (风向)
    const char *td;   // turbidity (浊度)
    const char *cdt;  // conductivity (电导率, 盐度)
} SensorItems;

/* 传感器-值 */
typedef struct {
    double et;   // environment temperature (环境温度)
    double eh;   // environment humidity (环境湿度)
    double pm25; // PM2.5
    double pm10; // PM10
    double o2;   // O2 (氧气浓度)
    double wt;   // water temperature (水温)
    double ph;   // PH (水环境PH)
    double do2;  // dissolved oxygen (溶解氧)
    double ws;   // wind speed (风速)
    char *wd;    // wind direction (风向), 八方位风向，东(E)，南(S), 西(W), 北(N);
                 // 东南(SE), 东北(NE), 西南(SW), 西北(NW)
    double td;   // turbidity (浊度)
    double cdt;  // conductivity (电导率, 盐度)
} SensorData;
